home *** CD-ROM | disk | FTP | other *** search
- It has proved difficult to retrieve the printer Driver, DeviceName and Port
- combination selected using the MhPrintDlg%() function (without using the 'Def'
- version to change the default printer and using GetProgileStringto load the Windows,Device line)
-
- However, with the help of the DIALOG.ZIP file uploaded by
- Costas Kitsos (73667,1755) we have derived the following:
-
- The DevNames data Structure contains the following items:
-
- wDriverOffset : Offset to start of DriverName e.g. 'Canon LPB-8 III'
- wDeviceOffset : Offset to start of DeviceName e.g. 'LBPIII'
- wOutputOffset : Offset to start of PortName e.g. 'LPT1'
- wDefault : 1 if default printer choosen, 0 otherwise.
-
- All offsets are relative to the base of the DevNames structure.
-
- Maximum Sizes:
- 32 for device + nul
- 8 for driver + nul
- 4 for port + nul
- Total = 47 extra bytes
-
- Type DevNames
- wDriverOffset As Integer
- wDeviceOffset As Integer
- wOutputOffset As Integer
- wDefault As Integer
- cNames As String * 47
- End Type
-
- Dim N As DevNames
- Dim P As MhPrintDlog
-
- If P.hDevNames <> 0 Then
- Address = GlobalLock(P.hDevNames) ' Lock handle and obtain address
- Call hmemcpy(N, ByVal Address, Len(N)) ' Copy to VB variable.
- Ok = GlobalUnlock(P.hDevNames) ' Unlock handle.
- ' The Memory used by the Devnames structure may be freed with
- '
- ' Ok = GlobalFree(P.hDevNames)
- '
- ' but if you call the the printer dialog again you need it
- ' to keep the settings currently in use
-
- ' Correct the offsets to to the base of the cNames string
- N.wDeviceOffset = N.wDeviceOffset - 7
- N.wDriverOffset = N.wDriverOffset - 7
- N.wOutputOffset = N.wOutputOffset - 7
-
- lenDevice = N.wDriverOffset - N.wDeviceOffset - 1
- lenDriver = N.wOutputOffset - N.wDriverOffset - 1
- ' and retrieve the strings
- PrnDevice$ = Mid$(N.cNames, N.wDeviceOffset, lenDevice)
- PrnDriver$ = Mid$(N.cNames, N.wDriverOffset, lenDriver)
- PrnPort$ = Mid$(N.cNames, N.wOutputOffset, 4)
- End If
-
- The PrnDevice$,PrnDriver$ and PrnPort$ may then be used
- with CreateDC to generate a Printer device context whenever
- printing is required. (Without presenting the common dialog):
-
- In Global module:
- Declare Function CreateDC Lib "GDI" (ByVal lpDriverName As String, ByVal
- lpDeviceName As String, ByVal lpOutput As String,ByVal pInitData As String) As
- Integer
- Declare Function DeleteDC Lib "GDI" (ByVal hDC As Integer) As Integer
-
- Where printing required:
-
- hDC = CreateDC(PrnDevice$, PrnDriver$, PrnPort$, hDevMode)
- '
- ' StartDoc Escape
- ' For each page:
- ' API Printing calls...
- ' NewPage Escape
- ' EndDoc Escape
- lOk = DeleteDC(hDC)
-
-